Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • View renderedDownload


lang/README.it.md dev (af76f09d) Text, 20.79 KB

Tc9d1d9# Reticulum MeshChatX

[Tff7b72English](Te6edf3../README.md) | [Tff7b72Deutsch](Te6edf3README.de.md) | [Tff7b72Русский](Te6edf3README.ru.md) | [Tff7b72中文](Te6edf3README.zh.md) | [Tff7b72日本語](Te6edf3README.ja.md)

Un fork ampiamente modificato e ricco di funzionalita di Reticulum MeshChat di Liam Cottle.

Questo progetto e indipendente dal progetto originale Reticulum MeshChat e non e affiliato ad esso.

Tff7b72- Sito web: [Tff7b72meshchatx.com](Te6edf3https://meshchatx.com)
Tff7b72- Codice sorgente: [Tff7b72github.com/Quad4-Software/MeshChatX](Te6edf3https://github.com/Quad4-Software/MeshChatX)
Tff7b72- Mirror: [Tff7b72lavaforge.org/Reticulum-Things/MeshChatX](Te6edf3https://lavaforge.org/Reticulum-Things/MeshChatX)
Tff7b72- Release: [Tff7b72github.com/Quad4-Software/MeshChatX](Te6edf3https://github.com/Quad4-Software/MeshChatX)
Tff7b72- Changelog: [Ta5d6ff`CHANGELOG.md`](../CHANGELOG.md)
Tff7b72- Donazioni: [Ta5d6ff`donate.md`](../donate.md) ([Donazioni](#donazioni))
Tff7b72- LXMF: Ta5d6ff`f489752fbef161c64d65e385a4e9fc74`
Tff7b72- Umbrel App Store: [Tff7b72apps.umbrel.com/app/meshchatx](Te6edf3https://apps.umbrel.com/app/meshchatx)

<a href="https://apps.obtainium.imranr.dev/redirect.html?r=obtainium://add/https://github.com/Quad4-Software/MeshChatX"><img src="https://raw.githubusercontent.com/ImranR98/Obtainium/main/assets/graphics/badge_obtainium.png" height="60" alt="Get it on Obtainium"></a>

rngit NomadNet Node: Ta5d6ff`5399f5a0212477618821e91e88ce053b:/page/index.mu`

rngit: Ta5d6ff`git clone rns://926baefe13daf5178c174f158dae1b45/quad4/MeshChatX`

MeshChatX NomadNet Node: Ta5d6ff`c10d80b1a42fa958c37a6cc30dc04f53:/page/index.mu`

Tc9d1d9## Modifiche importanti rispetto a Reticulum MeshChat

Tff7b72- Usa LXST per le chiamate
Tff7b72- Peewee ORM sostituito con SQL diretto
Tff7b72- Axios sostituito con Ta5d6ff`fetch` nativo
Tff7b72- Electron 41.x (runtime Node 24 incluso)
Tff7b72- Wheel Ta5d6ff`.whl` con web server e asset frontend integrati per piu opzioni di deploy
Tff7b72- i18n
Tff7b72- PNPM e UV per le dipendenze

Tff7b72> [!WARNING]
Tff7b72> MeshChatX non garantisce la compatibilita dei dati con le versioni precedenti di Reticulum MeshChat. Eseguire un backup prima della migrazione o dei test.

Tff7b72> [!WARNING]
Tff7b72> I sistemi legacy non sono ancora supportati. Base attuale: Python `>=3.11` e Node `>=24` (Electron 41 allineato a Node 24; `engines` in `package.json` e la CI seguono la stessa linea).

Tc9d1d9## Requisiti

Tff7b72- Python Ta5d6ff`>=3.11` (da Ta5d6ff`pyproject.toml`)
Tff7b72- Node.js Ta5d6ff`>=24` (da Ta5d6ff`package.json`, campo Ta5d6ff`engines`)
Tff7b72- pnpm Ta5d6ff`11.1.2` (da Ta5d6ff`package.json`, campo Ta5d6ff`packageManager`)
Tff7b72- UV (utilizzato in Ta5d6ff`Taskfile.yml` e nei workflow CI)

**Browser Versions Required:**

Safari 16.4 o successivo, Chrome 111 o successivo, Firefox 128 o successivo (interfaccia web integrata).

Ta5d6ff```Ta5d6ffbash
task install
task format
task lint
task Tffa657test
task build
Ta5d6ff```

Tc9d1d9## Metodi di installazione

Scegli il metodo in base all'ambiente e al formato del pacchetto.

| Metodo | Include frontend | Architetture | Ideale per |
| ------------------------- | -------------------- | ------------------------------------------------ | -------------------------------------------------- |
| Immagine Docker | Si | Ta5d6ff`linux/amd64`, Ta5d6ff`linux/arm64` | Avvio rapido su server Linux |
| Python wheel (Ta5d6ff`.whl`) | Si | Qualsiasi architettura supportata da Python | Installazione headless/web-server senza build Node |
| Linux AppImage | Si | Ta5d6ff`x64`, Ta5d6ff`arm64` | Uso desktop portatile |
| Pacchetto Debian (Ta5d6ff`.deb`) | Si | Ta5d6ff`x64`, Ta5d6ff`arm64` | Installazione Debian/Ubuntu |
| Pacchetto RPM (Ta5d6ff`.rpm`) | Si | Dipende dal runner CI per l'artefatto pubblicato | Fedora/RHEL/openSUSE |
| Da sorgente | Compilato localmente | Architettura host | Sviluppo e build personalizzati |

Note:

Tff7b72- GitHub Actions compila le release con tag (Linux wheel/AppImage/deb/rpm, Windows, macOS, Flatpak, APK Android se il tag è su dev/master, SLSA, bozza di release) in un'unica esecuzione tramite Ta5d6ff`.github/workflows/build-release.yml`; l'immagine container tramite Ta5d6ff`.github/workflows/docker.yml`. CI Android per branch e PR: Ta5d6ff`.github/workflows/android-build.yml`.
Tff7b72- Per Linux, Ta5d6ff`x64` e Ta5d6ff`arm64` AppImage + DEB sono compilate su GitHub; il RPM e tentato e viene caricato quando l'artefatto e prodotto.

Tc9d1d9## Docker

Tff7b72- **Docker Hub:** Ta5d6ff`quad4io/meshchatx`
Tff7b72- **GHCR:** Ta5d6ff`ghcr.io/quad4-software/meshchatx`

Ta5d6ff```Ta5d6ffbash
docker compose up -d
Ta5d6ff```

Ta5d6ff```Ta5d6ffbash
docker run -d --name reticulum-meshchatx Tffea00\
--restart unless-stopped Tffea00\
--init Tffea00\
--user T79c0ff1000:1000 Tffea00\
--security-opt no-new-privileges:true Tffea00\
--cap-drop ALL Tffea00\
--read-only Tffea00\
--tmpfs /tmp:noexec,nosuid,sizeTff7b72=256m Tffea00\
--tmpfs /home/meshchat:nosuid,sizeTff7b72=64m Tffea00\
--cpusTff7b72=T79c0ff2.0 Tffea00\
--memoryTff7b72=1g Tffea00\
--memory-reservationTff7b72=256m Tffea00\
--pids-limitTff7b72=T79c0ff512 Tffea00\
-p T79c0ff127.0.0.1:8000:8000 Tffea00\
-v meshchatx-config:/config Tffea00\
ghcr.io/quad4-software/meshchatx:latest
Ta5d6ff```

Al posto dell'immagine GHCR puoi usare Ta5d6ff`quad4io/meshchatx:latest` se preferisci Docker Hub.

Il file compose predefinito mappa:

Tff7b72- Ta5d6ff`127.0.0.1:8000` sull'host -> porta Ta5d6ff`8000` del container
Tff7b72- Volume Docker nominato **`meshchatx-config`** -> **`/config`** per la persistenza (adatto all'utente **meshchat** dell'immagine, UID 1000, senza Ta5d6ff`chown` sull'host per i bind mount)

**Opzionale: montare una directory dell'host**

Sostituisci la riga del volume con Ta5d6ff`-v "$(pwd)/meshchat-config:/config"` (Compose: modifica la voce Ta5d6ff`volumes` del servizio). Il container gira come **UID 1000**; la directory sull'host deve essere scrivibile (tipico: Ta5d6ff`sudo chown -R 1000:1000 ./meshchat-config`). Prima del primo avvio crea una directory vuota; altrimenti Docker potrebbe crearla con permessi errati.

**Ispezionare o eliminare il volume nominato**

Ta5d6ff```Ta5d6ffbash
docker volume inspect meshchatx-config
docker rm -f reticulum-meshchatx
docker volume rm meshchatx-config
Ta5d6ff```

Tc9d1d9## Installazione da artefatti di release

Tc9d1d9### 1) Linux AppImage (x64/arm64)

Tff7b721. Scaricare Ta5d6ff`ReticulumMeshChatX-v<versione>-linux-<arch>.AppImage` dalle release.
Tff7b722. Rendere eseguibile e avviare:

Ta5d6ff```Ta5d6ffbash
chmod +x ./ReticulumMeshChatX-v*-linux-*.AppImage
./ReticulumMeshChatX-v*-linux-*.AppImage
Ta5d6ff```

Tc9d1d9### 2) Debian/Ubuntu `.deb` (x64/arm64)

Tff7b721. Scaricare Ta5d6ff`ReticulumMeshChatX-v<versione>-linux-<arch>.deb`.
Tff7b722. Installare:

Ta5d6ff```Ta5d6ffbash
sudo apt install ./ReticulumMeshChatX-v*-linux-*.deb
Ta5d6ff```

Tc9d1d9### 3) Sistemi RPM

Tff7b721. Scaricare Ta5d6ff`ReticulumMeshChatX-v<versione>-linux-<arch>.rpm` se presente nella release.
Tff7b722. Installare:

Ta5d6ff```Ta5d6ffbash
sudo rpm -Uvh ./ReticulumMeshChatX-v*-linux-*.rpm
Ta5d6ff```

Tc9d1d9### 4) Python wheel (`.whl`)

I wheel delle release includono gli asset web compilati.

Ta5d6ff```Ta5d6ffbash
pip install ./reticulum_meshchatx-*-py3-none-any.whl
meshchatx --headless
Ta5d6ff```

Ta5d6ff`pipx` e supportato:

Ta5d6ff```Ta5d6ffbash
pipx install ./reticulum_meshchatx-*-py3-none-any.whl
Ta5d6ff```

Tc9d1d9## Esecuzione da sorgente (modalita web server)

Per sviluppo o build locali personalizzate.

Ta5d6ff```Ta5d6ffbash
git clone https://github.com/Quad4-Software/MeshChatX.git
Tffa657cd MeshChatX
corepack Tffa657enable
pnpm config Tffa657set verify-store-integrity Tffa657true
pnpm install --frozen-lockfile
pip install Ta5d6ff"uv==0.11.15"
uv lock --check
uv sync --group dev
pnpm run build-frontend
uv run python -m meshchatx.meshchat --headless --host T79c0ff127.0.0.1
Ta5d6ff```

Note sui comandi di installazione:

Tff7b72- Ta5d6ff`pnpm install --frozen-lockfile` rifiuta di aggiornare Ta5d6ff`pnpm-lock.yaml` e fallisce se il lockfile non corrisponde a Ta5d6ff`package.json`. Cosi' si evita che una versione upstream inattesa venga installata silenziosamente.
Tff7b72- Ta5d6ff`verify-store-integrity=true` e' impostato anche nel Ta5d6ff`pnpm-workspace.yaml` del progetto; la riga esplicita Ta5d6ff`pnpm config set` rafforza inoltre la configurazione utente.
Tff7b72- Gli script di lifecycle (Ta5d6ff`preinstall`/Ta5d6ff`postinstall`) sono bloccati di default in pnpm v11+. Solo i pacchetti elencati in Ta5d6ff`allowBuilds` di Ta5d6ff`pnpm-workspace.yaml` possono eseguire script di installazione (attualmente Ta5d6ff`electron`, Ta5d6ff`electron-winstaller`, Ta5d6ff`esbuild`).
Tff7b72- Ta5d6ff`uv lock --check` fallisce subito se Ta5d6ff`uv.lock` non e' allineato con Ta5d6ff`pyproject.toml`; Ta5d6ff`uv sync --group dev` risolve poi solo dal lockfile.
Tff7b72- Per un'installazione UV strettamente basata sul lockfile (senza refresh implicito), fissa UV con Ta5d6ff`pip install "uv==0.11.15"`, in linea con la CI.

Se vuoi aggiornare intenzionalmente le dipendenze, esegui Ta5d6ff`pnpm update` / Ta5d6ff`uv lock` in un commit dedicato e rivedi il diff del lockfile prima del push.

Tc9d1d9## Esecuzione in sandbox (Linux)

Per eseguire il binario nativo Ta5d6ff`meshchatx` (alias: Ta5d6ff`meshchat`) con isolamento aggiuntivo del filesystem, puoi usare **Firejail** o **Bubblewrap** (Ta5d6ff`bwrap`) mantenendo l'accesso di rete normale per Reticulum e l'interfaccia web. Esempi completi (pip/pipx, UV, note sulla seriale USB) sono in:

Tff7b72- [Ta5d6ff`docs/en/platform-guides/linux-sandbox.md`](../docs/en/platform-guides/linux-sandbox.md)

La stessa pagina compare nell'elenco **Documentazione** (documentazione MeshChatX) in-app quando viene servita dai file Ta5d6ff`meshchatx-docs` in bundle o sincronizzati.

Tc9d1d9## Desktop Linux: font emoji

Il selettore emoji mostra gli emoji Unicode standard usando i font di sistema (Electron/Chromium). Se compaiono quadrati vuoti ("tofu"), installate un pacchetto emoji a colori e riavviate l'app.

| Famiglia (esempi) | Pacchetto |
| -------------------------- | -------------------------------------------------------------------- |
| Arch Linux, Artix, Manjaro | Ta5d6ff`noto-fonts-emoji` (Ta5d6ff`sudo pacman -S noto-fonts-emoji`) |
| Debian, Ubuntu | Ta5d6ff`fonts-noto-color-emoji` (Ta5d6ff`sudo apt install fonts-noto-color-emoji`) |
| Fedora | Ta5d6ff`google-noto-emoji-color-fonts` |

Dopo l'installazione, eseguite Ta5d6ff`fc-cache -fv` se i glifi non compaiono fino al prossimo accesso. Opzionale: Ta5d6ff`noto-fonts` per una copertura simboli più ampia su installazioni minime.

Tc9d1d9## Compilazione pacchetti desktop da sorgente

Gli script sono definiti in Ta5d6ff`package.json` e Ta5d6ff`Taskfile.yml`.

Tc9d1d9### Linux x64 AppImage + DEB

Ta5d6ff```Ta5d6ffbash
pnpm run dist:linux-x64
Ta5d6ff```

Tc9d1d9### Linux arm64 AppImage + DEB

Ta5d6ff```Ta5d6ffbash
pnpm run dist:linux-arm64
Ta5d6ff```

Tc9d1d9### RPM

Ta5d6ff```Ta5d6ffbash
pnpm run dist:rpm
Ta5d6ff```

Oppure tramite Task:

Ta5d6ff```Ta5d6ffbash
task dist:fe:rpm
Ta5d6ff```

Tc9d1d9## Build container (wheel, AppImage, deb, rpm)

Ta5d6ff`Dockerfile.build` esegue le stesse fasi usate in CI (uv, pnpm, Ta5d6ff`task`, dipendenze APT). Orientato a **linux/amd64** (tarball NodeSource amd64, Task amd64). Il target predefinito e completo; si puo sovrascrivere con un build-arg.

Valori per Ta5d6ff`MESHCHATX_BUILD_TARGETS`: Ta5d6ff`all` (default), Ta5d6ff`wheel` o Ta5d6ff`electron` (AppImage + deb per x64 e arm64, RPM se possibile, senza wheel).

Build:

Ta5d6ff```Ta5d6ffbash
docker build -f Dockerfile.build -t meshchatx-build:local .
Ta5d6ff```

Solo wheel:

Ta5d6ff```Ta5d6ffbash
docker build -f Dockerfile.build --build-arg Te6edf3MESHCHATX_BUILD_TARGETSTff7b72=wheel -t meshchatx-build:wheel .
Ta5d6ff```

Copiare Ta5d6ff`/artifacts` dall'immagine finita all'host:

Ta5d6ff```Ta5d6ffbash
Te6edf3cidTff7b72=Tff7b72$(docker create meshchatx-build:localTff7b72)
docker cp Ta5d6ff"Tffd700${Te6edf3cidTffd700}Ta5d6ff:/artifactsTa5d6ff" ./meshchatx-artifacts
docker rm Ta5d6ff"Tffd700${Te6edf3cidTffd700}Ta5d6ff"
Ta5d6ff```

Tc9d1d9## Supporto architetture

Tff7b72- Immagine Docker: Ta5d6ff`amd64`, Ta5d6ff`arm64`
Tff7b72- Linux AppImage: Ta5d6ff`x64`, Ta5d6ff`arm64`
Tff7b72- Linux DEB: Ta5d6ff`x64`, Ta5d6ff`arm64`
Tff7b72- Windows: Ta5d6ff`x64`, Ta5d6ff`arm64` (script di build disponibili)
Tff7b72- macOS: script di build disponibili (Ta5d6ff`arm64`, Ta5d6ff`universal`) per ambienti di build locali
Tff7b72- Android: solo APK universale (vedi [Ta5d6ff`android/README.md`](../android/README.md))

Tc9d1d9## Android

MeshChatX supporta build APK Android native (non solo Termux).

Tc9d1d9### Build APK da sorgente

Dalla root del repository:

Ta5d6ff```Ta5d6ffbash
T8b949e# 1) Build delle wheel Chaquopy usate da android/app/build.gradle
bash scripts/build-android-wheels-local.sh

T8b949e# 2) Build APK universal (un debug + una release per esecuzione; vedi android/README.md)
Tffa657cd android
./gradlew --no-daemon :app:assembleDebug :app:assembleRelease
Ta5d6ff```

**Una** sola variante Android. Gradle sincronizza l'intera directory Ta5d6ff`meshchatx/` in Ta5d6ff`app/src/main/python/meshchatx/`, incluse le wheel offline del repository. Build documentate e pubblicate usano solo packaging **universal**: un APK debug e uno release per esecuzione, ciascuno con tutti gli ABI nativi configurati in Ta5d6ff`android/app/build.gradle`.

Tff7b72- Debug: Ta5d6ff`android/app/build/outputs/apk/debug/app-debug.apk`
Tff7b72- Release: Ta5d6ff`android/app/build/outputs/apk/release/app-release-unsigned.apk`

Note:

Tff7b72- Gli output di release non sono firmati finche non configuri la firma (Ta5d6ff`scripts/sign-android-apks.sh`).
Tff7b72- Gli ABI nativi nel APK universale seguono Ta5d6ff`android/app/build.gradle` (incluso Ta5d6ff`armeabi-v7a` se abilitato). Le wheel per Ta5d6ff`armeabi-v7a` richiedono Android SDK su Ta5d6ff`ANDROID_HOME` (vedi Ta5d6ff`android/README.md`).
Tff7b72- Se esiste in root Ta5d6ff`dist/reticulum_meshchatx-*.whl` (es. da Ta5d6ff`python -m build --wheel -o dist .`), l'aggiornamento del repository in bundle preferisce quella wheel rispetto a PyPI. In CI la wheel viene costruita prima del passo Gradle Android.

Documentazione aggiuntiva:

Tff7b72- [Ta5d6ff`docs/en/platform-guides/android-termux.md`](../docs/en/platform-guides/android-termux.md)
Tff7b72- [Ta5d6ff`android/README.md`](../android/README.md)

Tc9d1d9## Configurazione

| Argomento | Variabile d'ambiente | Predefinito | Descrizione |
| -------------------------- | ---------------------------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Ta5d6ff`--host` | Ta5d6ff`MESHCHAT_HOST` | Ta5d6ff`127.0.0.1` | Indirizzo di bind del web server |
| Ta5d6ff`--port` | Ta5d6ff`MESHCHAT_PORT` | Ta5d6ff`8000` | Porta del web server |
| Ta5d6ff`--no-https` | Ta5d6ff`MESHCHAT_NO_HTTPS` | Ta5d6ff`false` | Disattiva HTTPS |
| Ta5d6ff`--ssl-cert` / Ta5d6ff`--ssl-key` | Ta5d6ff`MESHCHAT_SSL_CERT` / Ta5d6ff`MESHCHAT_SSL_KEY` | (nessuno) | Percorsi PEM certificato e chiave; impostare entrambi. Sostituisce i certificati auto-generati sotto l'identita nella directory Ta5d6ff`ssl/`. |
| Ta5d6ff`--rns-log-level` | Ta5d6ff`MESHCHAT_RNS_LOG_LEVEL` | (nessuno) | Livello di log Reticulum (RNS): Ta5d6ff`none`, Ta5d6ff`critical`, Ta5d6ff`error`, Ta5d6ff`warning`, Ta5d6ff`notice`, Ta5d6ff`verbose`, Ta5d6ff`debug`, Ta5d6ff`extreme` o numerico. La CLI ha priorita sulla variabile d'ambiente se entrambe sono impostate. |
| Ta5d6ff`--headless` | Ta5d6ff`MESHCHAT_HEADLESS` | Ta5d6ff`false` | Non aprire il browser automaticamente |
| Ta5d6ff`--auth` | Ta5d6ff`MESHCHAT_AUTH` | Ta5d6ff`false` | Attiva autenticazione base |
| Ta5d6ff`--reset-password` | Ta5d6ff`MESHCHAT_RESET_PASSWORD` | Ta5d6ff`false` | Cancella l'hash della password memorizzata per impostarne una nuova tramite l'interfaccia web |
| Ta5d6ff`--storage-dir` | Ta5d6ff`MESHCHAT_STORAGE_DIR` | Ta5d6ff`./storage` | Directory dei dati |
| Ta5d6ff`--public-dir` | Ta5d6ff`MESHCHAT_PUBLIC_DIR` | auto/bundled | Directory dei file frontend (necessaria per installazioni da sorgente senza asset in bundle) |

Tc9d1d9## Branch

| Branch | Scopo |
| -------- | --------------------------------------------------------------------- |
| Ta5d6ff`master` | Release stabili. Solo codice pronto per la produzione. |
| Ta5d6ff`dev` | Sviluppo attivo. Potrebbe contenere modifiche instabili o incomplete. |

Tc9d1d9## Sviluppo

Attivita comuni da Ta5d6ff`Taskfile.yml`:

Ta5d6ff```Ta5d6ffbash
task install
task format
task lint
task Tffa657test
task build
Ta5d6ff```

I target Ta5d6ff`Makefile` sono wrapper sottili che delegano a Ta5d6ff`task` (stessi comandi di sopra):

| Comando | Delega a | Descrizione |
| -------------- | -------------- | ------------------------------------------ |
| Ta5d6ff`make install` | Ta5d6ff`task install` | Installa dipendenze pnpm e UV |
| Ta5d6ff`make run` | Ta5d6ff`task run` | Esegue MeshChatX tramite UV |
| Ta5d6ff`make build` | Ta5d6ff`task build` | Compila artefatti frontend e backend |
| Ta5d6ff`make lint` | Ta5d6ff`task lint` | ESLint, vue-tsc, knip, Ruff e basedpyright |
| Ta5d6ff`make test` | Ta5d6ff`task test` | Test frontend e backend |
| Ta5d6ff`make clean` | Ta5d6ff`task clean` | Rimuove artefatti di build e node_modules |

Tc9d1d9## Versionamento

Versione attuale nel repository: Ta5d6ff`4.8.2`.

Tff7b72- L'unico valore che modifichi per un bump di release e **`version` in `package.json`**.
Tff7b72- Esegui **`pnpm run version:sync`** (all'inizio anche di **`pnpm run build`**) per propagare in **`pyproject.toml`**, **`meshchatx/src/version.py`**, **`THIRD_PARTY_NOTICES.txt`** (riga prodotto), **README** / **lang/README.\*** (righe "versione attuale"), **esempio pipx in `docs/en/platform-guides/raspberry-pi.md`**, e aiuti in **`packaging/arch/PKGBUILD`**.
Tff7b72- **`meshchatx.__version__`** si legge da **`meshchatx/src/version.py`** senza importare **`meshchatx.src`**, cosi un semplice Ta5d6ff`import meshchatx` resta leggero.
Tff7b72- Le voci del **changelog** restano manuali quando tagghi una release.

Tc9d1d9## Sicurezza

Tff7b72- [Ta5d6ff`SECURITY.md`](../SECURITY.md)
Tff7b72- [Ta5d6ff`LEGAL.md`](../LEGAL.md)
Tff7b72- Controlli di integrita integrati e valori predefiniti HTTPS/WSS nel runtime dell'app.
Tff7b72- Build CI e release su GitHub Actions.

Tc9d1d9## Aggiungere una lingua

Flusso dell'autore: ArgosTranslate, poi LLM locale (Qwen 3 + Gemma 4).

Poi si accettano volentieri fix dalla community (LXMF o come mi contattate).

Il rilevamento locale e automatico. Aggiungi un file in Ta5d6ff`meshchatx/src/frontend/locales/` (es. Ta5d6ff`xx.json`) con le stesse chiavi di Ta5d6ff`en.json` e un Ta5d6ff`_languageName` in cima per l'etichetta nel selettore. Puoi copiare Ta5d6ff`en.json` e tradurre tutto a mano; **la generazione assistita da machine e opzionale** e non e mai obbligatoria.

**Opzionale: avvio con Argos Translate** -- per una bozza partendo da Ta5d6ff`en.json` puoi usare Ta5d6ff`scripts/argos_translate.py` (formattazione, output a colori, variabili di interpolazione come Ta5d6ff`{count}`).

Ta5d6ff```Ta5d6ffbash
T8b949e# Installa argostranslate se non l'hai gia
pipx install argostranslate

T8b949e# Esegui lo script di traduzione
python scripts/argos_translate.py --from en --to xx --input meshchatx/src/frontend/locales/en.json --output meshchatx/src/frontend/locales/xx.json --name Ta5d6ff"Nome della tua lingua"
Ta5d6ff```

Dopo qualsiasi passaggio automatico, un LLM o un revisore umano controlli grammatica, contesto e tono (es. formale vs informale).

Esegui Ta5d6ff`pnpm test -- tests/frontend/i18n.test.js --run` per verificare la parita delle chiavi con Ta5d6ff`en.json`.

Non sono necessarie altre modifiche al codice. L'app, il selettore della lingua e i test scoprono le lingue dalla cartella Ta5d6ff`meshchatx/src/frontend/locales/` durante la compilazione.

Tc9d1d9## Donazioni

Le donazioni sono facoltative. Servono a finanziare tempo e impegno per sviluppare questa app.

**Come donare:** [Ta5d6ff`donate.md`](../donate.md) (Monero, Ko-Fi, Buy Me a Coffee).

Tc9d1d9## Crediti

Tff7b72- [Tff7b72Liam Cottle](Te6edf3https://github.com/liamcottle) - Reticulum MeshChat originale
Tff7b72- [Tff7b72RFnexus](Te6edf3https://github.com/RFnexus) - parser micron (JavaScript)
Tff7b72- [Tff7b72markqvist](Te6edf3https://github.com/markqvist) - Reticulum, LXMF, LXST

Tc9d1d9## Licenza

Le parti di proprieta del progetto sono rilasciate sotto 0BSD.
Le parti originali upstream da Reticulum MeshChat restano sotto MIT.
Per testo completo e note, vedi [Ta5d6ff`../LICENSE`](../LICENSE).


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────